Profiling tools are used to evaluate applications for a variety of purposes including, for example, “trouble shooting”, “application tuning”, and “resource utilization optimization”. It is known in the prior art to use profiling tools that analyze a software execution path in a specific execution environment, language or operating system. However, where the application consists of more than one process or more than one language (e.g. a simple client-server networked application where the client is written in Java and the server has C stored procedures in an Relational Database Management System (RDBMS)), the client profiling tool traces only the single client activity, and is not capable of tracing the execution path across the network.
To further compound these problems, prior art profiling tools incorporate vendor specific or proprietary data collection engines and data exchange formats. Consequently, it is difficult to correlate execution traces detected by different vendor profiling tools in a distributed system incorporating diverse execution environments, languages and/or operating systems. Each profiling tool requires a specific or proprietary collection agent for each execution environment.
In the prior art model of application profiling, each application is assumed to be written in one programming language and executed on one computing machine in one execution environment. The profiling traces are composed of trace events, which occur sequentially, and which are stored in large files for later transport to profiling tools. The transmission of such large files can be a significant stress on a communication system. In addition, real time or near real time profiling of application is very difficult in such a system.
The advent of computer networking, and more recently the Internet, has, however, changed and expanded what constitutes an application. Over the Internet, an application may have a number of parts, written in a number of different programming languages, distributed on a number of different computer machines, and operated in a number different execution environments (herein referred to as “distributed environment”). The machines, languages, and environments of such an application are typically from a number of different vendors.
It is exceedingly difficult to develop a profiling tool that is able to interface with all of the products that may be available from various vendors in this environment. This is assuming that the vendors are prepared to disclose their application programming interfaces (APIs) to profiling tool vendors who may be competitors. Further, any change to the APIs may cause operability problems to the profiling tools. There are significant problems with developing and maintaining profiling tools, which are able to interface with products of a number of vendors (distributed access).
Additionally, prior art profiling tools obtain and store trace events in sequential form. In a distributed environment, trace events are not sequential especially as between different machines. There is no capability to correlate trace events between different machines or processes.
Recently, the Java programming language has been expanded to define a Java Virtual Machine Profiling Tool (JVMPI) for profiling hooks in a Java virtual machine. JVMPI is a two-way function call interface between the Java virtual machine and an in-process profiler or collection agent. On the one hand, the virtual machine notifies the collection agent of various events, corresponding to, for example, heap allocation, method calls, etc. The collection agent then communicates with a front-end analysis client, which may or may not run in the same process as the collection agent. On the other hand, the collection agent issues control requests to the Java virtual machine through the JVMPI. For example, the collection agent can turn on/off a specific event notification, based on the needs of the analysis client. The client may reside in a different process on the same machine, or on a remote machine connected via a network using vendor specific wire protocol suitable to the analysis client.
Although profiling tools based on JVMPI are useful for obtaining a variety of information performance data, the prior art problems relating to lack of distributed access and correlation capabilities remain.